package sysinit

// _下划线，当导入一个包时，该包下的文件里所有init()函数都会被执行
// 有些时候我们并不需要把整个包都导入进来，仅仅是是希望它执行init()函数而已。这个时候就可以使用 import _ 引用该包
import (
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	_ "github.com/go-sql-driver/mysql"
	_ "mbook/models"
)

// dbinit() 初始化主库
// dbinit('master') || dbinit(default) // 支持单库
// dbinit("master","slave") // 支持多库
func dbinit(aliases ...string) {

	// 如果是Dev环境的话，就输入日志，开始Debug模式
	isDev := ("dev" == beego.AppConfig.String("runmode"))

	if len(aliases) > 0 {
		for _, alias := range aliases {
			registDatabase(alias)
			//主库 自动建表
			if "w" == alias {
				orm.RunSyncdb("default", false, isDev)
			}
		}
	} else {
		registDatabase("w")
		// 主库 自动建表
		orm.RunSyncdb("default", false, isDev)
	}

	if isDev {
		orm.Debug = isDev
	}
}

func registDatabase(alias string) {
	if len(alias) <= 0 {
		return
	}
	dbAlias := alias //default
	if "w" == alias || "default" == alias {
		dbAlias = "default" //default
		alias = "w"
	}

	// 数据库名称
	dbName := beego.AppConfig.String("db_" + alias + "_database")
	// 数据库用户名
	dbUser := beego.AppConfig.String("db_" + alias + "_username")
	// 数据库密码
	dbPwd := beego.AppConfig.String("db_" + alias + "_password")
	// 数据库IP
	dbHost := beego.AppConfig.String("db_" + alias + "_host")
	// 数据库端口
	dbPort := beego.AppConfig.String("db_" + alias + "_port")
	//user:pwd@tcp(127.0.0.1:3306)/dbname?charset=utf8

	orm.RegisterDataBase(dbAlias, "mysql", dbUser+":"+dbPwd+"@tcp("+dbHost+":"+dbPort+")/"+dbName+"?charset=utf8", 30)

	// 如果是Dev环境的话，就输入日志，开始Debug模式
	//isDev := ("dev" == beego.AppConfig.String("runmode"))
	//
	//if "mater" == alias {
	//	orm.RunSyncdb("default", false, isDev)
	//}
	//
	//if isDev {
	//	orm.Debug = isDev
	//}
}
